/**
 * CalculatorLogImpl类实现了Calculator接口，并为每个方法添加了日志功能
 * 该类主要用于演示如何通过代码实现日志记录，以便在方法执行前后打印相关日志信息
 */
package com.atguigu.spring6.aop.example;

public class CalculatorLogImpl implements Calculator {

    /**
     * 实现加法操作，并在操作前后打印日志
     *
     * @param i 第一个操作数
     * @param j 第二个操作数
     * @return 两个操作数的和
     */
    @Override
    public int add(int i, int j) {
        // 打印加法方法开始的日志，包括方法名和参数值
        System.out.println("[日志] add方法开始了，参数是:" + i + "," + j);
        // 执行加法操作
        int result = i + j;
        // 打印加法方法内部的结果
        System.out.println("方法内部result= " + result);
        // 打印加法方法结束的日志，包括结果值
        System.out.println("[日志] add方法结束了，结果是：" + result);
        return result;
    }

    /**
     * 实现减法操作，并在操作前后打印日志
     *
     * @param i 第一个操作数
     * @param j 第二个操作数
     * @return 两个操作数的差
     */
    @Override
    public int sub(int i, int j) {
        // 打印减法方法开始的日志，包括方法名和参数值
        System.out.println("[日志] sub方法开始了，参数是:" + i + "," + j);
        // 执行减法操作
        int result = i - j;
        // 打印减法方法内部的结果
        System.out.println("方法内部result= " + result);
        // 打印减法方法结束的日志，包括结果值
        System.out.println("[日志] sub方法结束了，结果是：" + result);
        return result;
    }

    /**
     * 实现乘法操作，并在操作前后打印日志
     *
     * @param i 第一个操作数
     * @param j 第二个操作数
     * @return 两个操作数的积
     */
    @Override
    public int mul(int i, int j) {
        // 打印乘法方法开始的日志，包括方法名和参数值
        System.out.println("[日志] mul方法开始了，参数是:" + i + "," + j);
        // 执行乘法操作
        int result = i * j;
        // 打印乘法方法内部的结果
        System.out.println("方法内部result= " + result);
        // 打印乘法方法结束的日志，包括结果值
        System.out.println("[日志] mul方法结束了，结果是：" + result);
        return result;
    }

    /**
     * 实现除法操作，并在操作前后打印日志
     *
     * @param i 第一个操作数（被除数）
     * @param j 第二个操作数（除数）
     * @return 两个操作数的商
     * @throws ArithmeticException 如果除数为0，则抛出该异常
     */
    @Override
    public int div(int i, int j) {
        // 打印除法方法开始的日志，包括方法名和参数值
        System.out.println("[日志] div方法开始了，参数是:" + i + "," + j);
        // 执行除法操作，这里不处理除数为0的情况，以便简化示例
        int result = i / j;
        // 打印除法方法内部的结果
        System.out.println("方法内部result= " + result);
        // 打印除法方法结束的日志，包括结果值
        System.out.println("[日志] div方法结束了，结果是：" + result);
        return result;
    }
}

